package com.zc.datastructure.structure.tree;

import com.zc.datastructure.structure.AbstractNodeData;
import com.zc.datastructure.structure.AbstractNode;

/**
 * @author: zhuCan
 * @date: 2019-08-06 15:10
 * @description: 树的 操作接口
 */
public interface TreeHandler<NODE extends AbstractNode<DATA>, DATA extends AbstractNodeData> {

  /**
   * 插入 树结点
   *
   * @param data
   */
  void insert(DATA data);

  /**
   * 获取 树结点
   *
   * @param key
   * @return
   */
  NODE get(DATA key);

  /**
   * 删除树结点
   *
   * @param data
   */
  void delete(DATA data);

  /**
   * 判断是否是空树
   *
   * @return
   */
  boolean isEmpty();

  /**
   * 清空 删除所有树结点
   */
  void clear();

  /**
   * 获取树的高度
   *
   * @return
   */
  int height();

  /**
   * 获取 树的深度
   *
   * @return
   */
  int depth();

  /**
   * 获取结点的父节点
   *
   * @param node
   * @return
   */
  NODE parent(NODE node);
}
